package com.shrct.businessprocess.budget;

import com.shrct.businessprocess.budget.IHasACTEffectBudget;
import com.shrct.businessprocess.budget.IManualFinishableBudget;
import com.shrct.businessprocess.budget.RCBudget;
import com.shrct.businessprocess.budget.RCBudgetStatus;
import com.shrct.businessprocess.budget.RCBudgetTaskStatus;
import com.shrct.businessprocess.budget.RCCost4ACTItem;
import com.shrct.businessprocess.budget.RCCost4RemainItem;
import com.shrct.businessprocess.budget.RCDirectCostRequest;
import com.shrct.businessprocess.budget.RCHasCostBudgetCostRequest;
import com.shrct.businessprocess.budget.impl.RCHasCostBudgetImpl;
import com.shrct.businessprocess.budget.proxy.RCHasCostBudgetProxy;
import com.shrct.businessprocess.project.RCProjectMoney;
import com.shrct.businessprocess.project.RCRealMoney;
import com.shrct.businessprocess.purchase.RCPayRequest;
import edu.fudan.mylang.pf.EntityImplementation;
import java.util.Collection;
import org.eclipse.xtext.xbase.lib.Procedures.Procedure1;

@EntityImplementation(implementBy = RCHasCostBudgetImpl.class)
public interface RCHasCostBudget extends RCBudget, IManualFinishableBudget, IHasACTEffectBudget {
  public abstract Collection<RCHasCostBudgetCostRequest> getCostRequests();
  
  public abstract RCHasCostBudgetCostRequest createAndAddtoCostRequests();
  
  public abstract RCHasCostBudgetCostRequest createAndAddtoCostRequests(final Procedure1<RCHasCostBudgetCostRequest> updater);
  
  public abstract RCHasCostBudget removeFromCostRequests(final RCHasCostBudgetCostRequest rCHasCostBudgetCostRequest);
  
  public abstract RCHasCostBudget removeAllCostRequests();
  
  public abstract RCBudgetStatus getBudgetStatus();
  
  public abstract RCHasCostBudget setBudgetStatus(final RCBudgetStatus budgetStatus);
  
  public abstract String getTypeId();
  
  public abstract Collection<? extends RCPayRequest> getAllPayRequests();
  
  public abstract Iterable<? extends RCPayRequest> getAllFinishedPayRequests();
  
  public abstract RCRealMoney getTotalPaiedAmount();
  
  public abstract RCDirectCostRequest createDirectCostRequest(final Procedure1<? super RCDirectCostRequest> init);
  
  public abstract void updateDirectCostRequest(final RCDirectCostRequest value, final Procedure1<? super RCDirectCostRequest> updater);
  
  public abstract void deleteDirectCostRequest(final RCDirectCostRequest value);
  
  public abstract RCProjectMoney getActualPurchaseTax();
  
  public abstract RCProjectMoney getTotalPayRequestedAmount();
  
  public abstract Iterable<RCCost4ACTItem> getCost4ACItems();
  
  public abstract Iterable<RCCost4RemainItem> getRCCost4RemainItems();
  
  public abstract RCProjectMoney getActualCostAmount();
  
  public abstract Boolean seemsFinished();
  
  public abstract RCBudgetTaskStatus getBudgetTaskStatus();
  
  public abstract RCHasCostBudgetProxy toProxy();
}
